ChannelTabs.tsx 863 B

123456789101112131415161718192021222324252627282930313233343536
  1. 'use client';
  2. import Link from 'next/link';
  3. import { useSelectedLayoutSegment } from 'next/navigation';
  4. type Props = {
  5. identifier: string;
  6. };
  7. export default function ChannelTabs({ identifier }: Props) {
  8. const segment = useSelectedLayoutSegment();
  9. const encoded = encodeURIComponent(identifier);
  10. const tabs = [
  11. { key: null, label: '소개', href: `/channel/${encoded}` },
  12. { key: 'posts', label: '게시물', href: `/channel/${encoded}/posts` }
  13. ];
  14. return (
  15. <nav className="channel-page__tabs" aria-label="채널 탭">
  16. {tabs.map((tab) => {
  17. const active = segment === tab.key;
  18. return (
  19. <Link
  20. key={tab.label}
  21. href={tab.href}
  22. className={`channel-page__tab${active ? ' channel-page__tab--active' : ''}`}
  23. aria-current={active ? 'page' : undefined}
  24. >
  25. {tab.label}
  26. </Link>
  27. );
  28. })}
  29. </nav>
  30. );
  31. }